/*
    对axios进行二次封装
    做请求拦截和响应拦截
*/

/* 引入axios */
import axios from "axios"
/* 引入进度条的js */
import nProgress from "nprogress"
/* 引入进度条的css */
import "nprogress/nprogress.css"

/* 引入用户临时标识 */
import userState from "../store/modules/user"
/* 创建axios的实例 */
const server = new axios.create({
    /* 发送给服务器的IP地址 */
    baseURL: "/api",
    /* 请求超时时长ms */
    timeout: 5000,
})



/* 请求拦截 */
server.interceptors.request.use(
    /* 请求成功的处理 */
    config => {
        /* 开始进度条 */
        nProgress.start();
        /* 在所有的请求前，都在请求头中带上用户临时标识，这样在没有登录的时候
        服务器才能识别添加哪个用户添加的商品 */
        config.headers.userTempId = userState.state.userTempId();
        /* 在所有的请求时，都在请求头中带上token */
        config.headers.token = userState.state.token;
        return config;
    },
    /* 请求失败的处理 */
    error => {
        return Promise.reject(error)
    }
)
/* 响应拦截 */
server.interceptors.response.use(
    /* 响应成功的处理 */
    response => {
        /* 结束进度条 */
        nProgress.done()
        return response.data;
    },
    /* 响应失败的处理 */
    error => {
        nProgress.done()
        return Promise.reject(error)
    }
)


/* 暴露 */
export default server